package com.web;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectDemo {
    public static void main(String[] args) {
        //1.获取class对象
        Class clazz= Student.class;
        //2.创建对象
        try {
            Student student=(Student) clazz.newInstance();
            System.out.println(student);
            //3.获取所有方法
            Method[] methods=clazz.getDeclaredMethods();
            for (Method method:methods){
                System.out.println(method);
            }
            //4.获得一个特定的方法 参数1 方法名 参数2 方法的参数的类型
            Method method=clazz.getDeclaredMethod("setName", String.class);
            //5.调用方法 对象.方法(参数)-----> 方法名.invoke(对象，参数)
            method.invoke(student,"张三");
            System.out.println(student);
            //6.获得所有属性
            Field[] fields=clazz.getDeclaredFields();
            for (Field field:fields){
                System.out.println(field.getType()+""+field.getName());
            }
            //7.获得特定的属性
            Field field=clazz.getDeclaredField("age");
            //8.设置属性的可访问性
           field.setAccessible(true);
            field.set(student,18);
            //9.调用属性的set方法 对象.属性名=xxx

        }catch (Exception e)
        {
            e.printStackTrace();
        }

    }

}
